#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <thread>

static const int nt = 8;

using namespace std;

long getLargestPalindrome(int n){
    long i = n, j = n;
    while (i){
		j = j * 10 + i % 10;
		i /= 10;
	}
    return j;
}

int largestPalindrome(int n) {
    if (n == 1) return 9;
    int max = pow(10, n) - 1;
    for (int i = max; i >= 0; i--) {
        long num = getLargestPalindrome(i);
        for (long j = max; j * j >= num; j--) {
            if (num % j == 0) return (int)(num % 1337);
        }
    }
    return -1;
}

int main(){
    // thread t[nt];
    // for(int i = 1; i <= nt; i++){
    //     t[i-1] = thread(largestPalindrome, i);
    // }
    // for(int i = 1; i <= nt; i++){
    //     t[i-1].join();
    // }
    // for(int i = 1; i <= nt; i++){
    //     cout << largestPalindrome(i) << endl;
    // }
    cout << largestPalindrome(8) << endl;
    return 0;
}
